package com.cskaoyan.javase.array._4operation._4crud.equals;

/**
 * equals方法在Java当中是非常常用的一个方法
 * 但是当使用了一个null引用来调用方法时,就会导致空指针异常
 * 所以在不确定引用是否不为null的情况下,调用这个方法要先if判断一下
 * 如果引用是null,就不要去调用这个方法了.
 *
 * equals方法有一个非常重要的特点: 对称性
 * a.equals(b) 和 b.equals(a)
 * 效果是一样的,结果相同
 * 所以根据这一特点:
 * 我们在使用equals方法时,用一个不等于null的引用来调用方法
 * 这样绝无可能产生空指针异常
 * ()里面的参数即便是null,也没有问题
 *
 * String的equals方法在避免空指针异常上有特殊的用法:
 * String的equals方法的语法:
 *      String对象(引用)/字符串常量.equals(String对象(引用)/字符串常量)
 *      String的equals方法除了可以选择一个不为null的引用来调用方法以外
 *      还可以用字符串常量来调用这个方法
 *      也绝不会产生空指针异常
 *
 * 总结:
 *      1.equals方法使用时要注意空指针异常问题,要避免用一个null引用来调用equals方法
 *          普遍都可以的做法是 调用方法之前,用if判断
 *      2.equals方法具有对称性,尽量用一个不是null的引用调用方法
 *      3.String的equals方法很特殊,允许填入字符串常量
 *          所以String的equals方法,尽量用字符串常量来调用方法
 *          这样绝对没有空指针异常
 *
 * @since 17:26
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        String str = null;
        if (str != null) {
            System.out.println(str.equals("abc"));
        }

        // 实际上以上if判断是完全没必要的,只需要用"abc"来调用方法即可
        System.out.println("abc".equals(str));

    }
}
